# help.py
"""帮助信息模块"""

class HelpManager:
    """帮助信息管理器"""
    
    @staticmethod
    def get_general_help():
        """获取通用帮助信息"""
        help_text = """
📖📖 可用命令:
  auth            - 进行认证获取访问令牌
  config show|set - 显示或设置当前配置
  refresh         - 刷新访问令牌
  logout          - 清除认证信息
  ls [path]       - 列出远程目录内容
  cd path         - 更改远程当前工作目录
  pwd             - 显示远程当前工作目录
  get file        - 下载远程文件到本地
  put file        - 上传本地文件到远程
  download file   - 下载远程大文件到本地，支持多并发和断点续传
  lls [path]      - 列出本地目录内容
  lcd path        - 更改本地当前工作目录
  lpwd            - 显示本地当前工作目录
  lmkdir dir      - 在本地创建文件夹
  mkdir dir       - 创建远程目录
  rm path         - 删除远程极速文件或目录
  mv src dest     - 移动/重命名远程文件
  cp src dest     - 复制远程文件
  tree [极速]     - 以树状结构显示目录内容
  meta path       - 获取文件元数据信息
  rename path newname - 重命名文件/目录
  status          - 显示当前工具状态
  quota           - 查看网盘容量信息
  userinfo        - 获取用户信息
  debug on|off    - 显示设置调试开关
  help            - 显示帮助信息
  quit|exit|bye   - 退出程序

提示:
  - 按 Tab 键可以自动补全命令和文件名
  - 直接按回车键不会执行任何操作
"""
        return help_text
    
    @staticmethod
    def get_ls_help():
        """获取ls命令帮助信息"""
        help_text = """
📖📖 ls - 列出远程目录内容
用法: ls [-s SORT_BY] [-r] [path]
选项:
  -s SORT_BY  排序方式: name(文件名), time(时间), size(大小)
  -r          正序排列 (默认倒序)
示例:
  ls           # 列出当前目录，按时间倒序
  ls -s name   # 按文件名排序
  ls -极速 size -r # 按文件大小正序排列
  ls /我的资源  # 列出指定目录
"""
        return help_text
    
    @staticmethod
    def get_lls_help():
        """获取lls命令帮助信息"""
        help_text = """
📖📖 lls - 列出本地目录内容
用法: lls [-s SORT_BY] [-r] [path]
选项:
  -s SORT_BY  排序方式: name(文件名), time(时间), size(大小)
  -r          正序排列 (默认倒序)
示例:
  lls           # 列出当前目录，按时间倒序
  lls -s name   # 按文件名排序
  lls -s size -r # 按文件大小正序排列
  lls ~/Downloads  # 列出指定目录
"""
        return help_text
    
    @staticmethod
    def get_config_help():
        """获取config命令帮助信息"""
        help_text = """
📖📖 config - 配置客户端信息
用法:
  config show
  config set --client-id <ID> --client-secret <SECRET> [--redirect-uri <URI>]
  config set client_id=<ID> client_secret=<SECRET> [redirect_uri=<URI>]
示例:
  config set --client-id abc123 --client-secret xyz789
  config set client_id=abc123 client_secret=xyz789
  config set client_id=abc123 client_secret=xyz789 redirect_uri=oob
"""
        return help_text
    
    @staticmethod
    def get_logout_help():
        """获取logout命令帮助信息"""
        help_text = """
📖📖 logout - 清除认证信息
用法: logout [--all]
选项:
  --all  同时清除客户端配置（client_id和client_secret）
示例:
  logout      # 仅清除访问令牌
  logout --all # 清除所有认证信息和客户端配置
"""
        return help_text
    
    @staticmethod
    def get_auth_help():
        """获取auth命令帮助信息"""
        help_text = """
📖📖 auth - 进行认证获取访问令牌
用法: auth
说明:
  此命令将启动OAuth 2.0认证流程，引导用户完成百度网盘认证
  并获取访问令牌。需要先配置客户端信息（client_id和client_secret）
"""
        return help_text
    
    @staticmethod
    def get_refresh_help():
        """获取refresh命令帮助信息"""
        help_text = """
📖📖 refresh - 刷新访问令牌
用法: refresh
说明:
  此命令将使用刷新令牌获取新的访问令牌，延长会话有效期
"""
        return help_text
    
    @staticmethod
    def get_cd_help():
        """获取cd命令帮助信息"""
        help_text = """
📖📖 cd - 更改远程当前工作目录
用法: cd path
示例:
  cd /我的资源      # 切换到/我的资源目录
  cd ..           # 切换到上级目录
  cd              # 显示当前目录
"""
        return help_text
    
    @staticmethod
    def get_pwd_help():
        """获取pwd命令帮助信息"""
        help_text = """
📖📖 pwd - 显示远程当前工作目录
用法: pwd
说明:
  显示当前在百度网盘中的工作目录路径
"""
        return help_text
    
    @staticmethod
    def get_get_help():
        """获取get命令帮助信息"""
        help_text = """
📖📖 get - 从网盘下载文件到本地
用法: get remote_file [local_file]
示例:
  get /我的资源/文档.txt          # 下载文件到当前本地目录
  get /我的资源/文档.txt ~/文档/   # 下载文件到指定本地目录
"""
        return help_text

    @staticmethod
    def get_search_help():
      """获取search命令的帮助信息"""
      help_text = """
  🔍🔍 search - 搜索网盘文件和目录
  用法: search [-t TYPE] [-s SORT_BY] [-r] keyword [path]
  选项:
    -t TYPE      搜索类型: file(文件), dir(目录), all(全部，默认)
    -s SORT_BY   排序方式: name(文件名), time(时间), size(大小)
    -r           正序排列 (默认倒序)
    -l LIMIT     限制结果数量 (默认: 100)
    -h, --help   显示此帮助信息

  参数:
    keyword      搜索关键词 (支持模糊匹配)
    path         搜索路径 (默认为当前目录)

  示例:
    search 文档                     # 在当前目录搜索包含"文档"的文件和目录
    search -t file 图片 /我的资源     # 在指定目录搜索图片文件
    search -s time -r 报告           # 按时间正序排列搜索结果
    search -l 50 项目               # 最多显示50条搜索结果

  说明:
    - 搜索不区分大小写
    - 支持部分匹配，如"文档"会匹配"项目文档.txt"和"文档说明.pdf"
    - 搜索结果包含文件大小、修改时间等信息
    - 可以使用通配符 * 和 ? 进行更灵活的搜索
  """
      return help_text

    @staticmethod
    def get_put_help():
        """获取put命令帮助信息"""
        help_text = """
📖📖 put - 从本地上传文件到网盘
用法: put local_file [remote_file]
示例:
  put ~/文档.txt          # 上传文件到当前远程目录
  put ~/文档.txt /我的资源/ # 上传文件到指定远程目录
"""
        return help_text
    
    @staticmethod
    def get_lcd_help():
        """获取lcd命令帮助信息"""
        help_text = """
📖📖 lcd - 更改本地当前工作目录
用法: lcd path
示例:
  lcd ~/Downloads      # 切换到Downloads目录
  lcd ..              # 切换到上级目录
  lcd                 # 显示当前本地目录
"""
        return help_text
    
    @staticmethod
    def get_lpwd_help():
        """获取lpwd命令帮助信息"""
        help_text = """
📖📖 lpwd - 显示本地当前工作目录
用法: lpwd
说明:
  显示当前在本地文件系统中的工作目录路径
"""
        return help_text
    
    @staticmethod
    def get_lmkdir_help():
        """获取lmkdir命令帮助信息"""
        help_text = """
📖📖 lmkdir - 在本地创建文件夹
用法: lmkdir dirname
示例:
  lmkdir new_folder      # 在当前目录创建新文件夹
  lmkdir ~/projects      # 在指定路径创建文件夹
"""
        return help_text
    
    @staticmethod
    def get_mkdir_help():
        """获取mkdir命令帮助信息"""
        help_text = """
📖📖 mkdir - 创建网盘目录
用法: mkdir dirname
示例:
  mkdir new_folder      # 在当前目录创建新文件夹
  mkdir /我的资源/项目    # 在指定路径创建文件夹
"""
        return help_text
    
    @staticmethod
    def get_rm_help():
        """获取rm命令帮助信息"""
        help_text = """
📖📖 rm - 删除网盘文件或目录
用法: rm path
示例:
  rm /我的资源/文档.txt      # 删除文件
  rm /我的资源/旧项目        # 删除目录
注意: 删除操作不可逆，请谨慎使用
"""
        return help_text
    
    @staticmethod
    def get_mv_help():
        """获取mv命令帮助信息"""
        help_text = """
📖📖 mv - 移动/重命名网盘文件
用法: mv source dest
示例:
  mv /旧位置/文件.txt /新位置/文件.txt    # 移动文件
  mv /旧名称.txt /新名称.txt              # 重命名文件
"""
        return help_text
    
    @staticmethod
    def get_cp_help():
        """获取cp命令帮助信息"""
        help_text = """
📖📖 cp - 复制网盘文件
用法: cp source dest
示例:
  cp /源文件.txt /目标位置/文件.txt    # 复制文件
"""
        return help_text
    
    @staticmethod
    def get_tree_help():
        """获取tree命令帮助信息"""
        help_text = """
📖📖 tree - 以树状结构显示目录内容
用法: tree [path]
示例:
  tree          # 显示当前目录的树状结构
  tree /我的资源 # 显示指定目录的树状结构
"""
        return help_text
    
    @staticmethod
    def get_meta_help():
        """获取meta命令帮助信息"""
        help_text = """
📖📖 meta - 获取文件元数据信息
用法: meta path
示例:
  meta /我的资源/文档.txt  # 显示文件的详细信息
"""
        return help_text
    
    @staticmethod
    def get_rename_help():
        """获取rename命令帮助极速"""
        help_text = """
📖📖 rename - 重命名网盘文件/目录
用法: rename path newname
示例:
  rename /旧名称.txt 新名称.txt  # 重命名文件
"""
        return help_text
    
    @staticmethod
    def get_status_help():
        """获取status命令帮助信息"""
        help_text = """
📖📖 status - 显示当前工具状态
用法: status
说明:
  显示认证状态、当前工作目录和网盘空间使用情况
"""
        return help_text
    
    @staticmethod
    def get_quota_help():
        """获取quota命令帮助信息"""
        help_text = """
📖📖 quota - 查看网盘容量信息
用法: quota
说明:
  显示网盘总空间、已使用空间和剩余空间
"""
        return help_text
    
    @staticmethod
    def get_userinfo_help():
        """获取userinfo命令帮助信息"""
        help_text = """
📖📖 userinfo - 获取用户信息
用法: userinfo
说明:
  显示当前登录用户的详细信息
"""
        return help_text

    @staticmethod
    def get_perf_help():
        """获取perf命令的帮助信息"""
        help_text = """
📊📊 perf - 性能统计和诊断工具
用法: perf [command] [options]
命令:
  stats       显示性能统计信息 (默认命令)
  reset       重置性能计数器
  trace       启用或禁用请求跟踪
  report      生成性能报告

选项:
  -h, --help  显示此帮助信息

stats 命令选项:
  -d DETAIL   详细级别: basic(基本), detailed(详细), full(完整)
  -s SINCE    统计起始时间: today(今天), week(本周), month(本月) 或具体日期

trace 命令选项:
  on          启用请求跟踪
  off         禁用请求跟踪
  status      显示跟踪状态

示例:
  perf                     # 显示基本性能统计
  perf stats -d detailed   # 显示详细性能统计
  perf stats -s week      # 显示本周的性能统计
  perf trace on           # 启用请求跟踪
  perf trace off          # 禁用请求跟踪
  perf reset              # 重置性能计数器
  perf report             # 生成性能报告

说明:
  - 性能统计包括请求次数、成功率、平均响应时间等指标
  - 请求跟踪会记录每个API调用的详细信息，用于诊断问题
  - 重置计数器会清除所有历史性能数据
  - 性能报告会生成HTML格式的详细分析报告
"""
        return help_text
    
    @staticmethod
    def get_debug_help():
        """获取debug命令帮助信息"""
        help_text = """
📖📖 debug - 设置调试模式
用法: debug [on|off]
示例:
  debug on   # 开启调试模式
  debug off  # 关闭调试模式
  debug      # 显示当前调试状态
"""
        return help_text

    @staticmethod
    def get_quit_help():
        """获取退出命令的帮助信息（适用于quit、exit、bye）"""
        help_text = """
🚪🚪 退出程序命令
用法: quit|exit|bye [options]
命令:
  quit        退出程序
  exit        退出程序（quit的别名）
  bye         退出程序（quit的别名）

选项:
  -f, --force  强制退出，不保存历史记录
  -s, --save   退出前保存当前会话状态
  -h, --help   显示此帮助信息

示例:
  quit          # 正常退出程序
  exit --force  # 强制退出，不保存历史记录
  bye -s        # 退出前保存会话状态

说明:
  - 这三个命令功能完全相同，只是名称不同
  - 正常退出会自动保存命令历史记录
  - 使用 --force 选项会跳过保存步骤直接退出
  - 使用 --save 选项会强制保存当前会话状态

提示:
  - 可以使用快捷键 Ctrl+D 快速退出
  - 退出前会确认是否有未完成的操作
"""
        return help_text
   
    @staticmethod
    def get_command_help(command_name):
        """获取特定命令的帮助信息"""
        help_methods = {
            'auth': HelpManager.get_auth_help,
            'config': HelpManager.get_config_help,
            'refresh': HelpManager.get_refresh_help,
            'logout': HelpManager.get_logout_help,
            'ls': HelpManager.get_ls_help,
            'cd': HelpManager.get_cd_help,
            'pwd': HelpManager.get_pwd_help,
            'get': HelpManager.get_get_help,
            'put': HelpManager.get_put_help,
            'lls': HelpManager.get_lls_help,
            'lcd': HelpManager.get_lcd_help,
            'lpwd': HelpManager.get_lpwd_help,
            'lmkdir': HelpManager.get_lmkdir_help,
            'mkdir': HelpManager.get_mkdir_help,
            'rm': HelpManager.get_rm_help,
            'mv': HelpManager.get_mv_help,
            'cp': HelpManager.get_cp_help,
            'tree': HelpManager.get_tree_help,
            'meta': HelpManager.get_meta_help,
            'rename': HelpManager.get_rename_help,
            'status': HelpManager.get_status_help,
            'quota': HelpManager.get_quota_help,
            'userinfo': HelpManager.get_userinfo_help,
            'debug': HelpManager.get_debug_help,
            'quit': HelpManager.get_quit_help,
            'exit': HelpManager.get_quit_help,
            'bye': HelpManager.get_quit_help
        }
        
        if command_name in help_methods:
            return help_methods[command_name]()
        else:
            return f"❌❌ 没有找到 '{command_name}' 命令的帮助信息"
